package algo.A03_递归和算法复杂度;

/**
 * 将n个盘子从source移动到target的路径的打印
 */
public class T08_汉诺塔 {
    public static void main(String[] args) {
        solution(10,"A","B","C");
    }

    /**
     * 将n个盘子从source移动到target的路径的打印
     *
     * @param N    初识的N个从小到大的盘子，N是最大编号
     * @param from 原始柱子
     * @param to   目标柱子
     * @param help 辅助的柱子
     */
    private static void solution(int N, String from, String to, String help) {
        if (N == 1) {
            System.out.printf("move %d from %s to %s\n", N, from, to);
            return;
        }
        solution(N - 1, from, help, to);//先把前N-1个盘子挪到辅助的柱子上
        System.out.printf("move %d from %s to %s\n", N, from, to);//N可以顺利到达target
        solution(N - 1, help, to, from);//让N-1个盘子从辅助空间回到原始柱子上
    }
}
